# Dockerfile

# 基础镜像：严格遵守要求，使用 Ubuntu 16.04
FROM ubuntu:16.04
#FROM ubuntu:22.04
LABEL maintainer="Your Name <your.email@example.com>"
LABEL description="One-time build environment for a GraalVM native image compatible with Ubuntu 16.04+"

# --------------------------------------------------------------------------
# --- 警告：关于 glibc 兼容性 ---
# Ubuntu 16.04 的 glibc 版本 (约 2.23) 与 GraalVM 21 (JDK 21) 依赖的
# glibc 版本 (通常 > 2.25) 存在严重不匹配。
# 这极有可能导致 native-image 编译在最后链接阶段失败。
# 如果遇到此类底层错误，唯一可靠的解决方案是升级基础镜像。
# --------------------------------------------------------------------------

# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive \
    LANG=C.UTF-8 \
    GRAALVM_HOME=/usr/lib/graalvm \
    MAVEN_HOME=/usr/lib/maven
ENV JAVA_HOME=${GRAALVM_HOME} \
    PATH=${GRAALVM_HOME}/bin:${MAVEN_HOME}/bin:$PATH

# 1. 安装基础依赖
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    build-essential \
    zlib1g-dev \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

WORKDIR /build

# 2. 安装 GraalVM 和 Maven
# 将多个 COPY 和 RUN 合并，减少镜像层数，并在同一层删除压缩包
COPY build/graalvm-jdk-21_linux-x64_bin.tar.gz build/apache-maven-3.8.8.tar ./
RUN mkdir -p ${GRAALVM_HOME} ${MAVEN_HOME} && \
    tar -xzf graalvm-jdk-21_linux-x64_bin.tar.gz -C ${GRAALVM_HOME} --strip-components=1 && \
    tar -xf apache-maven-3.8.8.tar -C ${MAVEN_HOME} --strip-components=1 && \
    rm graalvm-jdk-21_linux-x64_bin.tar.gz apache-maven-3.8.8.tar

# 3. 采用分层构建，缓存依赖
# 这一部分保持不变，因为它对于构建效率至关重要
COPY pom.xml .
# 注意：如果使用settings.xml，请取消注释下一行
# COPY settings.xml /root/.m2/
RUN mvn -B -Pnative dependency:go-offline
# 4. 复制源代码并编译
COPY src ./src
RUN mvn -B -Pnative -DskipTests package
